Skip to main content

Auction.sol

Git Source

Inherits: Governance, ReentrancyGuard

Author: yearn.fi

General use dutch auction contract for token sales.

State Variables​

WAD​

uint256 internal constant WAD = 1e18;

MINUTE_HALF_LIFE​

Used for the price decay.

uint256 internal constant MINUTE_HALF_LIFE = 0.988514020352896135_356867505 * 1e27;

wantInfo​

Struct to hold the info for want.

TokenInfo internal wantInfo;

hook_​

Contract to call during write functions.

Hook internal hook_;

startingPrice​

The amount to start the auction at.

uint256 public startingPrice;

auctionLength​

The time that each auction lasts.

uint256 public auctionLength;

auctionCooldown​

The minimum time to wait between auction 'kicks'.

uint256 public auctionCooldown;

auctions​

Mapping from an auction ID to its struct.

mapping(bytes32 => AuctionInfo) public auctions;

enabledAuctions​

Array of all the enabled auction for this contract.

bytes32[] public enabledAuctions;

Functions​

constructor​

constructor() Governance(msg.sender);

initialize​

Initializes the Auction contract with initial parameters.

function initialize(
address _want,
address _hook,
address _governance,
uint256 _auctionLength,
uint256 _auctionCooldown,
uint256 _startingPrice
) external virtual;

Parameters

NameTypeDescription
_wantaddressAddress this auction is selling to.
_hookaddressAddress of the hook contract (optional).
_governanceaddressAddress of the contract governance.
_auctionLengthuint256Duration of each auction in seconds.
_auctionCooldownuint256Cooldown period between auctions in seconds.
_startingPriceuint256Starting price for each auction.

want​

Get the address of this auctions want token.

function want() public view virtual returns (address);

Returns

NameTypeDescription
<none>address. The want token.

hook​

Get the address of the hook if any.

function hook() external view virtual returns (address);

Returns

NameTypeDescription
<none>address. The hook.

getHookFlags​

Get the current status of which hooks are being used.

function getHookFlags() external view virtual returns (bool, bool, bool, bool);

Returns

NameTypeDescription
<none>bool. If the kickable hook is used.
<none>bool. If the kick hook is used.
<none>bool. If the preTake hook is used.
<none>bool. If the postTake hook is used.

numberOfEnabledAuctions​

Get the length of the enabled auctions array.

function numberOfEnabledAuctions() external view virtual returns (uint256);

getAuctionId​

Get the unique auction identifier.

function getAuctionId(address _from) public view virtual returns (bytes32);

Parameters

NameTypeDescription
_fromaddressThe address of the token to sell.

Returns

NameTypeDescription
<none>bytes32bytes32 A unique auction identifier.

auctionInfo​

Retrieves information about a specific auction.

function auctionInfo(bytes32 _auctionId)
public
view
virtual
returns (address _from, address _to, uint256 _kicked, uint256 _available);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.

Returns

NameTypeDescription
_fromaddressThe address of the token to sell.
_toaddressThe address of the token to buy.
_kickeduint256The timestamp of the last kick.
_availableuint256The current available amount for the auction.

kickable​

Get the pending amount available for the next auction.

Defaults to the auctions balance of the from token if no hook.

function kickable(bytes32 _auctionId) external view virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.

Returns

NameTypeDescription
<none>uint256uint256 The amount that can be kicked into the auction.

getAmountNeeded​

Gets the amount of want needed to buy a specific amount of from.

function getAmountNeeded(bytes32 _auctionId, uint256 _amountToTake) external view virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_amountToTakeuint256The amount of from to take in the auction.

Returns

NameTypeDescription
<none>uint256. The amount of want needed to fulfill the take amount.

getAmountNeeded​

Gets the amount of want needed to buy a specific amount of from at a specific timestamp.

function getAmountNeeded(bytes32 _auctionId, uint256 _amountToTake, uint256 _timestamp)
external
view
virtual
returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_amountToTakeuint256The amount from to take in the auction.
_timestampuint256The specific timestamp for calculating the amount needed.

Returns

NameTypeDescription
<none>uint256. The amount of want needed to fulfill the take amount.

_getAmountNeeded​

Return the amount of want needed to buy _amountToTake.

function _getAmountNeeded(AuctionInfo memory _auction, uint256 _amountToTake, uint256 _timestamp)
internal
view
virtual
returns (uint256);

price​

Gets the price of the auction at the current timestamp.

function price(bytes32 _auctionId) external view virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.

Returns

NameTypeDescription
<none>uint256. The price of the auction.

price​

Gets the price of the auction at a specific timestamp.

function price(bytes32 _auctionId, uint256 _timestamp) public view virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_timestampuint256The specific timestamp for calculating the price.

Returns

NameTypeDescription
<none>uint256. The price of the auction.

_price​

Internal function to calculate the scaled price based on auction parameters.

function _price(uint256 _kicked, uint256 _available, uint256 _timestamp) internal view virtual returns (uint256);

Parameters

NameTypeDescription
_kickeduint256The timestamp the auction was kicked.
_availableuint256The initial available amount scaled 1e18.
_timestampuint256The specific timestamp for calculating the price.

Returns

NameTypeDescription
<none>uint256. The calculated price scaled to 1e18.

enable​

Enables a new auction.

Uses governance as the receiver.

function enable(address _from) external virtual returns (bytes32);

Parameters

NameTypeDescription
_fromaddressThe address of the token to be auctioned.

Returns

NameTypeDescription
<none>bytes32. The unique identifier of the enabled auction.

enable​

Enables a new auction.

function enable(address _from, address _receiver) public virtual onlyGovernance returns (bytes32 _auctionId);

Parameters

NameTypeDescription
_fromaddressThe address of the token to be auctioned.
_receiveraddressThe address that will receive the funds in the auction.

Returns

NameTypeDescription
_auctionIdbytes32The unique identifier of the enabled auction.

disable​

Disables an existing auction.

Only callable by governance.

function disable(address _from) external virtual;

Parameters

NameTypeDescription
_fromaddressThe address of the token being sold.

disable​

Disables an existing auction.

Only callable by governance.

function disable(address _from, uint256 _index) public virtual onlyGovernance;

Parameters

NameTypeDescription
_fromaddressThe address of the token being sold.
_indexuint256The index the auctionId is at in the array.

setHookFlags​

Set the flags to be used with hook.

function setHookFlags(bool _kickable, bool _kick, bool _preTake, bool _postTake) external virtual onlyGovernance;

Parameters

NameTypeDescription
_kickableboolIf the kickable hook should be used.
_kickboolIf the kick hook should be used.
_preTakeboolIf the preTake hook should be used.
_postTakeboolIf the postTake should be used.

kick​

Kicks off an auction, updating its status and making funds available for bidding.

function kick(bytes32 _auctionId) external virtual nonReentrant returns (uint256 available);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.

Returns

NameTypeDescription
availableuint256The available amount for bidding on in the auction.

take​

Take the token being sold in a live auction.

Defaults to taking the full amount and sending to the msg sender.

function take(bytes32 _auctionId) external virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.

Returns

NameTypeDescription
<none>uint256. The amount of fromToken taken in the auction.

take​

Take the token being sold in a live auction with a specified maximum amount.

Uses the sender's address as the receiver.

function take(bytes32 _auctionId, uint256 _maxAmount) external virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_maxAmountuint256The maximum amount of fromToken to take in the auction.

Returns

NameTypeDescription
<none>uint256. The amount of fromToken taken in the auction.

take​

Take the token being sold in a live auction.

function take(bytes32 _auctionId, uint256 _maxAmount, address _receiver) external virtual returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_maxAmountuint256The maximum amount of fromToken to take in the auction.
_receiveraddressThe address that will receive the fromToken.

Returns

NameTypeDescription
<none>uint256_amountTaken The amount of fromToken taken in the auction.

take​

Take the token being sold in a live auction.

function take(bytes32 _auctionId, uint256 _maxAmount, address _receiver, bytes calldata _data)
external
virtual
returns (uint256);

Parameters

NameTypeDescription
_auctionIdbytes32The unique identifier of the auction.
_maxAmountuint256The maximum amount of fromToken to take in the auction.
_receiveraddressThe address that will receive the fromToken.
_databytesThe data signify the callback should be used and sent with it.

Returns

NameTypeDescription
<none>uint256_amountTaken The amount of fromToken taken in the auction.

_take​

Implements the take of the auction.

function _take(bytes32 _auctionId, uint256 _maxAmount, address _receiver, bytes memory _data)
internal
virtual
nonReentrant
returns (uint256 _amountTaken);

Events​

AuctionEnabled​

Emitted when a new auction is enabled

event AuctionEnabled(bytes32 auctionId, address indexed from, address indexed to, address indexed auctionAddress);

AuctionDisabled​

Emitted when an auction is disabled.

event AuctionDisabled(bytes32 auctionId, address indexed from, address indexed to, address indexed auctionAddress);

AuctionKicked​

Emitted when auction has been kicked.

event AuctionKicked(bytes32 auctionId, uint256 available);

AuctionTaken​

Emitted when any amount of an active auction was taken.

event AuctionTaken(bytes32 auctionId, uint256 amountTaken, uint256 amountLeft);

Structs​

TokenInfo​

Store address and scaler in one slot.

struct TokenInfo {
address tokenAddress;
uint96 scaler;
}

AuctionInfo​

Store all the auction specific information.

struct AuctionInfo {
TokenInfo fromInfo;
uint96 kicked;
address receiver;
uint128 initialAvailable;
uint128 currentAvailable;
}

Hook​

Store the hook address and each flag in one slot.

struct Hook {
address hook;
bool kickable;
bool kick;
bool preTake;
bool postTake;
}